import type { LoginResult } from '@/types/member'
import { defineStore } from 'pinia' // 引入pinia
import { ref } from 'vue'

// 定义 Store
export const useMemberStore = defineStore(
  'member',
  () => {
    // (state, 类似于组件的data, 存储全局状态)
    // (getters,类似于组件的computed,用来封装计算属性,具有缓存的功能)
    // (actions,类似于组件的methods,用于封装业务逻辑,修改state,不能使用箭头函数来定义actions,因为箭头函数绑定外部的this)

    // 会员信息 state
    const profile = ref<LoginResult>()

    // 保存会员信息，登录时使用
    const setProfile = (val: LoginResult) => {
      profile.value = val
    }

    // 清理会员信息，退出时使用
    const clearProfile = () => {
      profile.value = undefined
    }

    // 记得 return
    return {
      profile,
      setProfile,
      clearProfile,
    }
  },

  // TODO: 持久化 开启数据缓存
  {
    // 网页端配置
    // persist: true,

    // 小程序端配置
    persist: {
      storage: {
        // 将数据持久化到storage中,必须有getitem和setitem两个方法,存储数据必须是同步的
        getItem(key) {
          return uni.getStorageSync(key)
        },
        setItem(key, value) {
          uni.setStorageSync(key, value)
        },
      },
    },
  },
)
